//题目:
// 给定一个二叉树 根节点 root ，树的每个节点的值要么是 0，要么是 1。
// 请剪除该二叉树中所有节点的值为 0 的子树。
// 节点 node 的子树为 node 本身，以及所有 node 的后代
#include<iostream>

using namespace std;
//代码:
struct TreeNode 
{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
class Solution 
{
public:
    void cursion(TreeNode*& root)
    {
        if(root==nullptr)return;
        
        cursion(root->left);
        cursion(root->right);

        if(root->val==0 && root->left==nullptr && root->right==nullptr)
        {
            //delete root;//不能删??————bug
            root=nullptr;
        }
    }

    // TreeNode* cursion(TreeNode*& root)
    // {
    //     if(root==nullptr)return nullptr;
        
    //     root->left=cursion(root->left);
    //     root->right=cursion(root->right);

    //     if(root->val==0 && root->left==nullptr && root->right==nullptr)
    //     {
    //         delete root;
    //         return nullptr;
    //     }
    //     return root;
    // }
    TreeNode* pruneTree(TreeNode* root) 
    {
        // if(root==nullptr)return nullptr;
        
        // root->left=pruneTree(root->left);
        // root->right=pruneTree(root->right);

        // if(root->left==nullptr && root->right==nullptr && root->val==0)
        // {
        //     delete root; //不能删??————bug
        //     root=nullptr;
        // }
        cursion(root);
        return root;
    }
};